#include<bits/stdc++.h>
using namespace std;
const int len=1e5+10;
int T,n,m,L,V,ans;
struct node{
    int st,ve,a;
}tot[len],jian[len],jch[len];
int jcy[len];
vector<int>wcs;
bool cmp(node x,node y){
    return x.st<y.st;
}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n>>m>>L>>V;
        int idx=0,idx2=0;
        for(int i=1;i<=n;i++){
            int s,v,a;
            cin>>s>>v>>a;
            node t;
            t.st=s,t.ve=v,t.a=a;
            if(a<0)jian[++idx2]=t;
            else tot[++idx]=t;
        }
        for(int i=1;i<=m;i++){
            cin>>jcy[i];
        }
        ans=0;
        bool flag=false,flag2=false;
        for(int i=1;i<=idx;i++){
            node t=tot[i];
            if(t.a==0&&t.st<=jcy[m]){
               if(t.ve>V){
                    flag=true,ans++;
               }
            }
            else if(t.a>0&&t.st<=jcy[m]){
                int s=t.ve*t.ve + 2 * t.a *(jcy[m]-t.st);
                int tmp=sqrt(s);
                if(tmp*tmp!=s)tmp++;
                if(tmp>V)ans++,flag2=true;
            }
        }//chulizhengxiang
        sort(jian+1,jian+idx2+1,cmp);
        int j=1;
        for(int i=1;i<=m;i++){
            while(jian[j].st<jcy[i]&&j<=idx2){
                node t=jian[j];
                int s=t.ve*t.ve + 2 * t.a *(jcy[i]-t.st);
                int tmp=sqrt(s);
                if(tmp*tmp<s)tmp++;
                if(tmp>V)ans++;
                else{
                    wcs.push_back(j);
                }
                j++;
            }
            if(j==idx2+1)break;
        }
        cout<<ans<<' ';//chaosu
        ans=0;
        if(flag2)ans=1,flag=false,flag2=false;
        j=0;
        int jchidx=0;
        for(int i=1;i<=idx2;i++){
            if(wcs[j]==i){
                j++;
                continue;
            }
            node t=jian[i];
            int s=t.ve*t.ve + 2 * t.a *(jcy[m]-t.st);
            int tmp=sqrt(s);
            if(tmp*tmp<s)tmp++;
            if(tmp>V)continue;
            else jch[++jchidx]=t;
        }
        if(!ans&&flag)ans=1;
        cout<<m-ans<<'\n';
    }
    return 0;
}
